/**
 * 上传文件信息
 */
export interface UploadFile {
    /** 文件ID */
    id: string
    /** 文件名 */
    name: string
    /** 原始文件名 */
    originalName: string
    /** 文件大小（字节） */
    size: number
    /** 文件类型 */
    type: string
    /** 文件扩展名 */
    extension: string
    /** 文件URL */
    url: string
    /** 文件路径 */
    path: string
    /** 上传状态 */
    status: 'pending' | 'uploading' | 'success' | 'error'
    /** 上传进度 */
    percentage?: number
    /** 错误信息 */
    error?: string
    /** 创建时间 */
    createdAt: string
    /** 更新时间 */
    updatedAt: string
    /** 上传者ID */
    uploaderId?: string
    /** 上传者名称 */
    uploaderName?: string
    /** 文件描述 */
    description?: string
    /** 文件标签 */
    tags?: string[]
    /** 是否公开 */
    isPublic: boolean
    /** 下载次数 */
    downloadCount: number
    /** 文件哈希值 */
    hash?: string
    /** 缩略图URL */
    thumbnailUrl?: string
    /** 文件元数据 */
    metadata?: Record<string, any>
}

/**
 * 上传响应
 */
export interface UploadResponse {
    /** 文件信息 */
    file: UploadFile
    /** 上传结果 */
    success: boolean
    /** 消息 */
    message: string
    /** 错误码 */
    code?: number
}

/**
 * 文件列表响应
 */
export interface FileListResponse {
    /** 文件列表 */
    files: UploadFile[]
    /** 总数 */
    total: number
    /** 当前页 */
    page: number
    /** 每页大小 */
    size: number
    /** 总页数 */
    totalPages: number
}

/**
 * 文件上传配置
 */
export interface UploadConfig {
    /** 允许的文件类型 */
    allowedTypes: string[]
    /** 最大文件大小（字节） */
    maxSize: number
    /** 是否支持多文件上传 */
    multiple: boolean
    /** 上传目录 */
    uploadDir: string
    /** 是否生成缩略图 */
    generateThumbnail: boolean
    /** 缩略图配置 */
    thumbnailConfig?: {
        width: number
        height: number
        quality: number
    }
    /** 是否压缩图片 */
    compressImage: boolean
    /** 图片压缩配置 */
    compressConfig?: {
        quality: number
        maxWidth: number
        maxHeight: number
    }
}

/**
 * 文件上传请求参数
 */
export interface UploadRequest {
    /** 文件 */
    file: File
    /** 自定义文件名 */
    customName?: string
    /** 文件描述 */
    description?: string
    /** 文件标签 */
    tags?: string[]
    /** 是否公开 */
    isPublic?: boolean
    /** 额外元数据 */
    metadata?: Record<string, any>
}

/**
 * 文件搜索参数
 */
export interface FileSearchParams {
    /** 关键词 */
    keyword?: string
    /** 文件类型 */
    type?: string
    /** 文件扩展名 */
    extension?: string
    /** 上传者ID */
    uploaderId?: string
    /** 是否公开 */
    isPublic?: boolean
    /** 标签 */
    tags?: string[]
    /** 开始时间 */
    startDate?: string
    /** 结束时间 */
    endDate?: string
    /** 最小文件大小 */
    minSize?: number
    /** 最大文件大小 */
    maxSize?: number
    /** 排序字段 */
    sortBy?: 'name' | 'size' | 'createdAt' | 'downloadCount'
    /** 排序方向 */
    sortOrder?: 'asc' | 'desc'
    /** 页码 */
    page?: number
    /** 每页大小 */
    size?: number
}

/**
 * 文件统计信息
 */
export interface FileStatistics {
    /** 总文件数 */
    totalFiles: number
    /** 总大小 */
    totalSize: number
    /** 今日上传数 */
    todayUploads: number
    /** 本周上传数 */
    weekUploads: number
    /** 本月上传数 */
    monthUploads: number
    /** 按类型统计 */
    typeStats: {
        [key: string]: number
    }
    /** 按大小范围统计 */
    sizeStats: {
        small: number // < 1MB
        medium: number // 1MB - 10MB
        large: number // > 10MB
    }
    /** 热门文件 */
    popularFiles: UploadFile[]
} 